package com.ouc.visualization.service;

import com.ouc.visualization.entity.PictFile;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

/**
 * nc数据转图片相关service服务
 *
 * @author B504
 */
public interface NcPictServiceVisualization {
  /**
   * 从nc文件获取的数据转换成byte数组
   *
   * @param data        二维数组
   * @param fixedMin    给定最小值
   * @param fixedMax    给定最大值
   * @param colorType   颜色类型
   * @param reverseFlag 是否颜色翻转
   * @return
   * @throws IOException
   */
  Future<BufferedImage> getPictFromNcData2D(float[][] data, float fixedMin, float fixedMax, String colorType, boolean reverseFlag) throws IOException;

  /**
   * 从nc文件获取的数据转换成byte数组
   *
   * @param data        原始数据
   * @param colorType   颜色类型
   * @param reverseFlag 是否需要反转
   * @return
   * @throws IOException
   */
  Future<BufferedImage> getPictFromNcData2D(float[][] data, String colorType, boolean reverseFlag) throws IOException;

  /**
   * 获取文件的PictFile对象
   * 包含文件名合byte数组
   *
   * @param filePath 文件路径
   * @return
   */
  PictFile getPictFile(String filePath);

  /**
   * 通过多线程方式生成图片
   *
   * @param data        原始nc数据
   * @param fixedMin    设定的最小值
   * @param fixedMax    设定的最大值
   * @param colorType   颜色类型
   * @param reverseFlag 是否翻转（纬度从小到大不需要翻转，否则需要翻转）
   * @return 图片流数据
   * @throws IOException
   */
  BufferedImage getPictFromData2DByThread(float[][] data, Float fixedMin, Float fixedMax, String colorType, boolean reverseFlag) throws IOException, ExecutionException, InterruptedException;
}
